package com.txc.openfeign.common.pay.api;


import com.txc.openfeign.common.pay.dto.CollectDto;
import com.txc.openfeign.common.pay.dto.CostInfoDto;
import com.txc.openfeign.common.pay.factory.PayBusinessApiFallbackFactory;
import com.txc.openfeign.common.pay.vo.QueryCollectResVO;
import com.txc.openfeign.common.pay.vo.ResBaseVO;
import com.txc.openfeign.common.pay.vo.UserCostInfoVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;


/**
 * 支付宝生活缴费业务接口
 *
 * @InterfaceName: PayBusinessApi
 * @Author: TXC
 * @Date: 2022-01-02 10:18
 **/
@FeignClient(value = "cloud-pay", contextId = "payBusinessApi", fallbackFactory = PayBusinessApiFallbackFactory.class)
public interface PayBusinessApi {

    /**
     * 获取用户欠费数据
     *
     * @param costInfoDto 查询条件
     * @return 结果
     */
    @PostMapping("/getUserCostInfo")
    UserCostInfoVO getUserCostInfo(@RequestBody CostInfoDto costInfoDto);


    /**
     * 代收缴费接口
     *
     * @param collectDto 参数
     * @return 结果
     */
    @PostMapping("/collect")
    ResBaseVO collect(@RequestBody CollectDto collectDto);


    /**
     * 销账结果查询接口规范
     *
     * @param bankSerial 缴费流水号：同代收缴费接口bankSerial
     * @param bankDate 缴费时间
     * @param acctOrgNo 清算单位，与机构打款账号对应，判断用户打款号正确性的标志。
     * @return 结果
     */
    @GetMapping("/queryPayment")
    QueryCollectResVO queryPayment(@RequestParam("bankSerial")String bankSerial, @RequestParam("bankDate")String bankDate, @RequestParam("acctOrgNo")String acctOrgNo);


    /**
     * 文件通知接口规范
     *
     * @param acctOrgNo 清算单位，与机构打款账号对应，判断用户打款号正确性的标志。
     * @param filePath 文件存放相对路径
     * @param fileType 文件类型: DSDZ：代收对账文本；REDK：代扣扣款反馈文本；
     * @param fileName 文件名，公共事业通知代收方时传入
     * @return 结果
     */
    @GetMapping("/noticeCheck")
    ResBaseVO noticeCheck(@RequestParam("acctOrgNo")String acctOrgNo, @RequestParam("filePath")String filePath,
                          @RequestParam("fileType")String fileType, @RequestParam("fileName")String fileName);

}
